/**
 * 滴滴：请使用 javascript 写一个自定义函数将下列数组转化为树形结构
 * 原数组 arr ，预期结果 res
 */
// 原数组
const arr = [
  { id: 0, parentId: null, text: '第-级文字' },
  { id: 1, parentId: 0, text: '第二级文字' },
  { id: 2, parentId: 0, text: '第三级文字' },
  { id: 3, parentId: null, text: '第四级文字' },
  { id: 4, parentId: null, text: '第五级文字' },
  { id: 5, parentId: 3, text: '第六级文字' },
  { id: 6, parentId: 3, text: '第七级文字' },
]
// 预期结果
const res = [
  {
    id: 0,
    parentId: null,
    text: '第一级文字',
    childens: [
      { id: 1, parentId: 0, text: '第二级文字' },
      {
        id: 2,
        parentId: 0,
        text: '第三级文字',
      },
    ],
  },
  {
    id: 3,
    parentId: null,
    text: '第四级文字',
    childens: [
      { id: 5, parentId: 3, text: '第六级文字' },
      { id: 6, text: '第七级文字', parentId: 3 },
    ],
  },
  { id: 4, parentId: null, text: '第五级文字' },
]

// 方案一：不考虑性能，先筛选出第一级数据，再迭代第一级找出它的下级
const listToTree = arrayData => {
  // 第一级数据
  const firstLevel = arrayData.filter(item => item.parentId === null)
  // 再迭代第一级找出它的下级
  firstLevel.forEach(item => {
    const children = arrayData.filter(data => data.parentId === item.id)
    if (children.le ngth > 0) item.children = children
  })
  return firstLevel
}

console.log(listToTree(arr))
